/**
 * @file pays.h
 * @brief Fichier d'entête du module pays.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

#ifndef H_PAYS_H
#define H_PAYS_H

/* *********************************************************************

                       Librairies de pays                           

********************************************************************* */

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include "utilitaireString.h"

/* *********************************************************************

                        Définitions de types                           

********************************************************************* */

/**
 * @struct sPays
 * @brief Structure utilisée pour la gestion des Pays
 *
 * Cette structure est utilisée pour gérer un Pays. Les champs de cette structure doivent être modifiés ou lus par les accesseurs et mutateurs. Ils doivent être initialisés et libérés avec les fonctions prévus à cette effet
 */
struct sPays {
	unsigned int id; /** */
	char * libelle; /** */
  char maj;
  char sup;
};
/**
 * @typedef Pays
 * @brief Redéfinit la structure sPays
 */
typedef struct sPays Pays;

/* *********************************************************************

           Fonctions de la structure Pays          

********************************************************************* */

/**
 * @fn Pays * creer_Pay() ;
 * @brief Crée une pays dans le tas
 *
 * @return un pointeur sur Pays
 */
Pays * creer_Pay();

/**
 * @fn void init_Pay(Pays * pays);
 * @brief Initilise une pays
 *
 * @param[in,out] Pays pointeur sur Pays
 */
void init_Pay(Pays * pays);

/**
 * @fn void liberer_Pay(Pays * pays);
 * @brief Libère la pays
 *
 * @param[in,out] pays pointeur sur Pays
 */
void liberer_Pay(Pays * pays);

/**
 * @fn void detruire_Pay(Pays ** pays);
 * @brief Détruis une pays du tas
 * 
 * @param[in,out] pays pointeur sur Pays
 */
void detruire_Pay(Pays ** pays);

/**
 * @fn void copier_Pay(Pays *dest, const Pays *src);
 * @brief Copie dans dest le Pays src
 *
 * @param[in,out] dest contiendra les mêmes infor que src
 * @param src
 */
void copier_Pay(Pays **dest, const Pays *src);

/* *********************************************************************

           Accesseurs et Mutateurs de la structure Pays               

********************************************************************* */

/**
 * @fn unsigned int getId_Pay(const Pays * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Pays
 * @return unsigned int
 */
unsigned int getId_Pay(const Pays * ptr) ;

/**
 * @fn void setId_Pay(Pays *ptr, const unsigned int val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Pays.
 * @param val.
 */
void setId_Pay(Pays *ptr, const unsigned int val) ;

/**
 * @fn char * getLibelle_Pay(const Pays * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Pays
 * @return char *
 */
char * getLibelle_Pay(const Pays * ptr) ;

/**
 * @fn void setLibelle_Pay(Pays *ptr, const char * val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Pays.
 * @param val.
 */
void setLibelle_Pay(Pays *ptr, const char * val) ;

/**
 * @fn void setMaj_Pay(Pays *ptr, const char b);
 * @brief Set le besoin de faire une mise à jour, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setMaj_Pay(Pays *ptr, const char b);

/**
 * @fn char getMaj_Pay(const Pays *ptr);
 * @brief Retourne 0 si pas besoin de faire la mise à jour, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getMaj_Pay(const Pays *ptr);

/**
 * @fn void setSup_Pay(Pays *ptr, const char b);
 * @brief Set le besoin de le supprimer, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setSup_Pay(Pays *ptr, const char b);

/**
 * @fn char getSup_Pay(const Pays *ptr);
 * @brief Retourne 0 si pas besoin de le supprimer, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getSup_Pay(const Pays *ptr);

#endif
